// 导航守卫 + 动态路由功能 + store;
import router from '@/router'
import store from '@/store'

// 1. 定义白名单
const whiteList = [
  '/login'
]
router.beforeEach((to, from, next) => {
  // 1. 先判断用户是否登陆 vuex
  if(store.getters.token) {
    // - 用户访问登陆页面
     if(to.path === '/login') {
       next('/layouts/home')
     } else {
      // - 用户访问非登陆页面
      if (store.getters.roles.length) {
        next()
      } else {
        store.dispatch('GetUserInfo').then(res => {
          // 获取路由
          const menus = store.getters.asyncRoutes
          // 动态添加
          menus.forEach((item:any) => {
            router.addRoute(item)
          })
          // 获取用户本来想去的页面路径
          let path:any = from.query.redirect || '/layouts/home';
          next(path)
        })
      }
     }
  } else {
    if (whiteList.indexOf(to.path) === -1) {
      next(`/login?redirect=${to.path}`)
    } else {
      next()
    }
  }
})








// console.log('store:', store)

// router.beforeEach((to, from, next) => {
  // console.log('store.getters.token:', store.getters.token)
  // // 1. token
  // if (store.getters.token) {
  //   console.log('authToken: 我是toekn')
  //  // 已经登陆，但是用户输入 还是  /login 跳到首页
  //  if (to.path === '/login') {
  //    next('/layouts/home') // 首页还没有添加进入路由表
  //  } else {
  //    console.log('store.getters:', store.getters)
  //     // 判断用户是否已经添加过一次了
  //     if(store.getters.authUserId.length) {
  //       console.log('---------------->|--------->')
  //       store.dispatch('update_token').then(res => {
  //         console.log(store.getters.asyncRoutes, '----------->')
  //       })
  //       next()
  //     } else {

  //     }

  //     // store.getters.asyncRoutes

  //    // 已经登陆，但是用户输入的是   /layouts/home 判断你能不能进首页
  //    // 动态添加路由
  //    // 如果让用户不重复添加 动态路由
  //    // 权限 auth: [1]
  //   //  if (auth.length) { // 如果auth有值，说明用户已经添加过一次动态路由，直接让用户跳转进入页面，
  //   //   next()
  //   //  } else {
  //   //    // 用户添加完路由了
  //   //     let authRoutes = filterRoutes(AsyncComponentRoutes, 0)
  //   //     console.log('authRoutes:', authRoutes)
  //   //     authRoutes.forEach((item: any) => {
  //   //       router.addRoute(item)
  //   //     })
  //   //     auth.push(0)
  //   //     next('/layouts')
  //   //  }
  //  }
  // } else {
  //   // 用户没有登陆 ， 用户要登陆 /login
  //   // 用户没有的登陆，但是用户输入的是 /layouts/home
  //   console.log('我是没有token的页面')
  //   next()
  // }
// })

// 封装一个递归过滤函数，用来过滤路由函数
// function filterRoutes(routes: any, userId: number) {
//   // 1. 过滤 第一层
//   console.log('routes:', routes)
//   let filterArr = routes.filter((v:any) => v.meta.userId.indexOf(userId) !== -1)
//   // console.log('filterArr:', filterArr)
//   routes.forEach((item: any) => {
//     item.children = item.children && item.children.length && filterRoutes(item.children, userId)
//   })
//   console.log('routes:', routes)
//   // 2. 递归 过滤children
//   return filterArr;
// }
// let it = filterRoutes(AsyncComponentRoutes, 0)

// console.log(it, 'it')


/**
 *
 * 1. 先判断是否需要守卫
 * 2. 如果需要守卫，则判断，是否携带token(是否登陆)
 * 3. 用户已经登陆，且当前路由需要守卫-
 *
 *    是否已经添加过动态路由
 *    添加动态路由
 *    next()
 */
